﻿using System;

namespace Xenta.Enums
{
    /// <summary>
    /// Defines the customer address flags.
    /// </summary>
    [Flags]
    public enum CustomerAddressFlags
    {
        /// <summary>
        /// Indicates no flags.
        /// </summary>
        None = 0x00000000,

        #region S

        /// <summary>
        /// Indicates that an entity is active.
        /// </summary>
        Active = 0x00000001,

        #endregion

        #region O

        /// <summary>
        /// Indicates that an address is a default address.
        /// </summary>
        Default = 0x00010000

        #endregion
    }

    /// <summary>
    /// Defines the stock entry flags.
    /// </summary>
    [Flags]
    public enum StockEntryFlags
    {
        /// <summary>
        /// Indicates no flags.
        /// </summary>
        None = 0x00000000,

        #region S

        /// <summary>
        /// Indicates that an entity is active.
        /// </summary>
        Active = 0x00000001,

        #endregion

        #region O

        /// <summary>
        /// The oversold(negative reserve quantity) is allowed.
        /// </summary>
        OversoldAllowed = 0x00010000,

        /// <summary>
        /// Indicates, whether to send notification, when the exhaustion 
        /// threshold has been reached.
        /// </summary>
        ExhaustionNotificationEnabled = 0x00020000,

        #endregion
    }

    /// <summary>
    /// Defines the payment flags.
    /// </summary>
    [Flags]
    public enum PaymentFlags
    {
        /// <summary>
        /// Indicates no flags.
        /// </summary>
        None = 0x00000000,

        #region S

        /// <summary>
        /// Indicates that an entity is active.
        /// </summary>
        Active = 0x00000001,

        #endregion

        #region G1

        /// <summary>
        /// The payment has been voided.
        /// </summary>
        Voided = 0x00000010,

        /// <summary>
        /// The payment has been refunded.
        /// </summary>
        Refunded = 0x00000020,

        /// <summary>
        /// The payment is being pended.
        /// </summary>
        Pending = 0x00000040,

        /// <summary>
        /// The payment has been authorized.
        /// </summary>
        Authorized = 0x00000080,

        /// <summary>
        /// The payment has been captured.
        /// </summary>
        Captured = 0x00000100

        #endregion
    }

    /// <summary>
    /// Defines the sales item flags.
    /// </summary>
    [Flags]
    public enum SalesItemFlags
    {
        /// <summary>
        /// Indicates no flags.
        /// </summary>
        None = 0x00000000,

        #region S

        /// <summary>
        /// Indicates that an entity is active.
        /// </summary>
        Active = 0x00000001,

        #endregion

        #region O

        /// <summary>
        /// Indicates that price is variable.
        /// </summary>
        VariablePricing = 0x00010000

        #endregion
    }

    /// <summary>
    /// Defines the sales option flags.
    /// </summary>
    [Flags]
    public enum SalesOptionFlags
    {
        /// <summary>
        /// Indicates no flags.
        /// </summary>
        None = 0x00000000,

        #region S

        /// <summary>
        /// Indicates that an entity is active.
        /// </summary>
        Active = 0x00000001,

        #endregion

        #region G1

        /// <summary>
        /// The option may be applied for a sales item.
        /// </summary>
        Item = 0x00000010,

        /// <summary>
        /// The option may be applied for an order.
        /// </summary>
        Order = 0x00000020,

        /// <summary>
        /// The option may be applied for both.
        /// </summary>
        Common = 0x00000040,

        #endregion

        #region O

        /// <summary>
        /// Indicates that option is required.
        /// </summary>
        /// <remarks>
        /// Should be considered in a scope of option group.
        /// </remarks>
        Required = 0x00010000,

        /// <summary>
        /// Indicates that the multiple choice is allowed.
        /// </summary>
        /// <remarks>
        /// Should be considered in a scope of option group.
        /// </remarks>
        MultipleChoiceAllowed = 0x00020000,

        /// <summary>
        /// Indicates that option is default choice.
        /// </summary>
        /// <remarks>
        /// Should be considered in a scope of option group.
        /// </remarks>
        DefaultChoice = 0x00040000

        #endregion
    }

    /// <summary>
    /// Defines the sales rule flags.
    /// </summary>
    [Flags]
    public enum SalesRuleFlags
    {
        /// <summary>
        /// Indicates no flags.
        /// </summary>
        None = 0x00000000,

        #region S

        /// <summary>
        /// Indicates that an entity is active.
        /// </summary>
        Active = 0x00000001,

        #endregion

        #region G1

        /// <summary>
        /// The rule is to be applied to an order item.
        /// </summary>
        ItemScope = 0x00000010,

        /// <summary>
        /// The rule is to be applied to an order.
        /// </summary>
        OrderScope = 0x00000020

        #endregion
    }

    /// <summary>
    /// Defines the sales rule history flags.
    /// </summary>
    [Flags]
    public enum SalesRuleHistoryFlags
    {
        /// <summary>
        /// Indicates no flags.
        /// </summary>
        None = 0x00000000,

        #region S

        /// <summary>
        /// Indicates that an entity is active.
        /// </summary>
        Active = 0x00000001

        #endregion
    }

    /// <summary>
    /// Defines the seller address flags.
    /// </summary>
    [Flags]
    public enum SellerAddressFlags
    {
        /// <summary>
        /// Indicates no flags.
        /// </summary>
        None = 0x00000000,

        #region S

        /// <summary>
        /// Indicates that an entity is active.
        /// </summary>
        Active = 0x00000001,

        #endregion

        #region O

        /// <summary>
        /// Indicates that an address is a default address.
        /// </summary>
        Default = 0x00010000

        #endregion
    }

    /// <summary>
    /// Defines the seller flags.
    /// </summary>
    [Flags]
    public enum SellerFlags
    {
        /// <summary>
        /// Indicates no flags.
        /// </summary>
        None = 0x00000000,

        #region S

        /// <summary>
        /// Indicates that an entity is active.
        /// </summary>
        Active = 0x00000001,

        #endregion

        #region O

        /// <summary>
        /// The comments are allowed.
        /// </summary>
        CommentAllowed = 0x00010000,

        /// <summary>
        /// The anonymous comments are allowed.
        /// </summary>
        AnonCommentAllowed = 0x00020000,

        /// <summary>
        /// The ratings are allowed.
        /// </summary>
        RatingAllowed = 0x00040000,

        /// <summary>
        /// The anonymous ratings are allowed.
        /// </summary>
        AnonRatingAllowed = 0x00080000

        #endregion
    }

    /// <summary>
    /// Defines the seller comment flags.
    /// </summary>
    [Flags]
    public enum SellerCommentFlags
    {
        /// <summary>
        /// Indicates no flags.
        /// </summary>
        None = 0x00000000,

        #region S

        /// <summary>
        /// Indicates that an entity is active.
        /// </summary>
        Active = 0x00000001,

        #endregion
    }

    /// <summary>
    /// Defines the seller rating flags.
    /// </summary>
    [Flags]
    public enum SellerRatingFlags
    {
        /// <summary>
        /// Indicates no flags.
        /// </summary>
        None = 0x00000000,

        #region S

        /// <summary>
        /// Indicates that an entity is active.
        /// </summary>
        Active = 0x00000001,

        #endregion
    }

    /// <summary>
    /// Defines the shopping cart flags.
    /// </summary>
    [Flags]
    public enum ShoppingCartFlags
    {
        /// <summary>
        /// Indicates no flags.
        /// </summary>
        None = 0x00000000
    }

    /// <summary>
    /// Defines the shopping cart item flags.
    /// </summary>
    [Flags]
    public enum ShoppingCartItemFlags
    {
        /// <summary>
        /// Indicates no flags.
        /// </summary>
        None = 0x00000000
    }

    /// <summary>
    /// Defines the order item flags.
    /// </summary>
    [Flags]
    public enum OrderItemFlags
    {
        /// <summary>
        /// Indicates no flags.
        /// </summary>
        None = 0x00000000
    }

    /// <summary>
    /// Defines the order flags.
    /// </summary>
    [Flags]
    public enum OrderFlags
    {
        /// <summary>
        /// Indicates no flags.
        /// </summary>
        None = 0x00000000,

        #region S

        /// <summary>
        /// Indicates that an entity is active.
        /// </summary>
        Active = 0x00000001,

        #endregion

        #region G1

        /// <summary>
        /// The order has been canceled.
        /// </summary>
        Canceled = 0x00000010,

        /// <summary>
        /// The order has been pended.
        /// </summary>
        Pending = 0x00000020,

        /// <summary>
        /// The order has been confirmed.
        /// </summary>
        Confirmed = 0x00000040,

        /// <summary>
        /// The order is being processed.
        /// </summary>
        Processing = 0x00000080,

        /// <summary>
        /// The order has been completed.
        /// </summary>
        Completed = 0x00000100

        #endregion
    }

    /// <summary>
    /// Defines the order comment flags.
    /// </summary>
    [Flags]
    public enum OrderCommentFlags
    {
        /// <summary>
        /// Indicates no flags.
        /// </summary>
        None = 0x00000000,

        #region S

        /// <summary>
        /// Indicates that an entity is active.
        /// </summary>
        Active = 0x00000001,

        #endregion

        #region O

        /// <summary>
        /// Indicates that public access is allowed.
        /// </summary>
        Public = 0x00010000

        #endregion
    }

    /// <summary>
    /// Defines the invoice flags.
    /// </summary>
    [Flags]
    public enum InvoiceFlags
    {
        /// <summary>
        /// Indicates no flags.
        /// </summary>
        None = 0x00000000,

        #region S

        /// <summary>
        /// Indicates that an entity is active.
        /// </summary>
        Active = 0x00000001,

        #endregion

        #region G1

        /// <summary>
        /// The invoice has been canceled.
        /// </summary>
        Canceled = 0x00000010,

        /// <summary>
        /// The invoice has been pended.
        /// </summary>
        Pending = 0x00000020,

        /// <summary>
        /// The invoice has been issued.
        /// </summary>
        Issued = 0x00000040,

        /// <summary>
        /// The invoice has been paid.
        /// </summary>
        Paid = 0x00000080

        #endregion
    }

    /// <summary>
    /// Defines the customer flags.
    /// </summary>
    [Flags]
    public enum CustomerFlags
    {
        /// <summary>
        /// Indicates no flags.
        /// </summary>
        None = 0x00000000,

        #region S

        /// <summary>
        /// Indicates that an entity is active.
        /// </summary>
        Active = 0x00000001

        #endregion
    }
}
